package com.gr.controller;

import com.gr.entity.Tea;
import com.gr.entity.Type;
import com.gr.service.TeaService;
import com.gr.service.TypeService;
import com.gr.service.impl.TeaServiceImpl;
import com.gr.service.impl.TypeServiceImpl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.sql.Date;
import java.util.List;

@Controller
@RequestMapping("/tea")
public class TeaController {
    TeaService ts=new TeaServiceImpl();
    @RequestMapping("/select")
    public String selectAll(Model model){
        List<Tea> teas = ts.selectAll();
        //teas.forEach(System.out::println);
        model.addAttribute("teas",teas);
        return "/tealist.jsp";
    }
    @RequestMapping("/insertTea")
    public String insertTea(Tea tea){
        ts.insertTea(tea);
        //这里内部转发也要加RequestMapping路径
        return "/tea/select.do";
    }
    @RequestMapping("/delete")
    public String deleteTea(Integer id){
        ts.deleteTeaById(id);
        return "/tea/select.do";
    }

    /**
     * 点击修改后获取到要修改的id并跳至查询单个获取要修改的对象
     * @param id
     * @param model
     * @return
     */
    @RequestMapping("selectOne")
    public String selectOne(Integer id,Model model){
        Tea tea=ts.selectOne(id);
        model.addAttribute("tea",tea);
        //在此跳转之前查询类别，调用业务层方法
        TypeService ty=new TypeServiceImpl();
        List<Type> types=ty.selectAll();
        model.addAttribute("types",types);
        return "/updateTea.jsp";//不需要跳typecontroller 查询单个和查询类别在一个方法里

    }
    /**
     * 修改表单提交数据至修改controller->
     */
    @RequestMapping("/update")
    public String updateTea(Tea tea,Model model,String tname){//跟jsp，name保持一致
        tea.setTime(new Date(1)); //单独获取date值  收参date    jsp中有tea的name、price、id
        TypeService ty=new TypeServiceImpl();
        Type type = ty.selectOne(tname);//type中根据姓名查询单个 获得种类对象
        tea.setTid(type.getId());//根据种类对象id属性调用tea对象修改tid方法，获取tid   收参tid
        ts.updateTea(tea);

        List<Type> types= ty.selectAll();
        model.addAttribute("types",types);
        //通过jsp把所有参数set进对象传入controller
        return "redirect:/tea/select.do";
    }

    /**
     * 控制器：为了在jsp点击种类名后查询到该种类下所有茶
     * @param model
     * @param tid
     * @return
     */
    @RequestMapping("/selectTeaByTypeID")
    public String selectTeaByTypeID(Model model,Integer tid){
        TypeService typeService=new TypeServiceImpl();
        /**     思路——暂未实现
         * 首先从展示所有种类jsp点击一个种类的超链接获取种类的name属性
         * 根据name查询到Type对象，调用getID方法获取到：种类名超链接对应的种类id
         * 需要一个根据bid查询所有奶茶的方法，将此id传入，获取list集合
         * ！！！！暂时不知道？重写一个展示一个类别所有饮品的jsp？？先写批量删除
         * */
        List<Tea> teas=ts.selectTeaByTypeID(tid);
        model.addAttribute("teas",teas);
        System.out.println(teas);
        return "/tealist.jsp";
    }

    /**
     * 思路：1.收参从jsp复选框获取到复选框传来的id集合ids
     *      (之前没血mvc前需要在controller中 String[] ids=req.getParameterValues("ids");收参jsp传来的id数组)
     *      2.循环集合，调业务类删除方法
     *      3.跳转到selectAllController中
     * @param ids
     * @return
     */
    @RequestMapping("/MulDeleteTea")
    public String MulDeleteTea(int[] ids){
        for (int i=0;i<=ids.length;i++){//ArrayIndexOutOfBoundsException
            ts.deleteTeaById(ids[i]);//报此行错误，点击删除报500
        }
        return "/tea/select.do";
    }

}
